package de.se2.sharebox.controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;

import de.se2.sharebox.classes.*;
import de.se2.sharebox.frames.*;

/**
 *
 * @author Gruppe 10
 *
 */
public class LoginRegistrationController
{
	private LoginFrame loginForm;
	private RegistrationFrame registrationForm;
	private User user;
	private MainFrame mainForm;

	public LoginRegistrationController(User user, LoginFrame loginForm)
	{
		this.loginForm = loginForm;
		this.user = user;
		this.addListenerToLogin();
	}

	/**
	 * Addieren Listeners auf dem Loginform
	 */
	private void addListenerToLogin()
	{
		this.loginForm.setLoginListener(new LoginListener());
		this.loginForm.setRegistrationListener(new RegistrationListener());
	}

	/**
	 * Addieren Listeners auf dem Registrierungsform
	 */
	private void addListenerToRegistration()
	{
		this.registrationForm.setRegistrationListener(new UserRegistrationListener());
		this.registrationForm.setCancelListener(new CancelListener());
	}

	/**
	 * Implementierung von Loginbutton auf der Loginform
	 */
	class LoginListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			if (loginForm.getEmail().equals("") || loginForm.getPassword().equals(""))
			{
				JOptionPane.showMessageDialog(null, "Geben Sie bitte Ihre Email und Password ein. Oder Registrieren?");
			} else if (user.login(loginForm.getEmail(), loginForm.getPassword()))
			{
				loginForm.setVisible(false);
				mainForm = new MainFrame();
				new MainController(user, mainForm);
			} else
			{
				JOptionPane.showMessageDialog(null, "Dein Psw oder Emial ist nicht korrekt. Oder Registrieren?");
			}
		}
	}

	/**
	 * Implementierung von Registrationbutton auf der Loginform
	 */
	class RegistrationListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			loginForm.setVisible(false);
			if (registrationForm == null)
			{
				registrationForm = new RegistrationFrame();
				addListenerToRegistration();
			} else
				registrationForm.setVisible(true);
			cleanForms();
		}
	}

	/**
	 * Implementierung von Registrationbutton auf der Registrierungsform
	 */
	class UserRegistrationListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			if (registrationForm.getName().equals("") || registrationForm.getEmail().equals("") || registrationForm.getPassword().equals(""))
				JOptionPane.showMessageDialog(null, "Alle drei Felder sind angefordert!");
			else
			{
				UserAccount userAccount = new UserAccount(registrationForm.getName(), registrationForm.getEmail(), registrationForm.getPassword());
				AccountsCollection.getInstance().addAccount(userAccount);
				// register and update our db... not the best way... but we are
				// simulating ;)
				JOptionPane.showMessageDialog(null, "Sie haben sich erfolgreich registriert! Wooho!!");
				registrationForm.setVisible(false);
				loginForm.setVisible(true);
				cleanForms();
			}
		}
	}

	/**
	 * Implementierung von Cancelbutton auf der Registrierungsform
	 */
	class CancelListener implements ActionListener
	{
		public void actionPerformed(ActionEvent e)
		{
			registrationForm.setVisible(false);
			loginForm.setVisible(true);
			cleanForms();
		}
	}

	/**
	 * Textentfernung von Registration- und Anmeldungsforms
	 */
	private void cleanForms()
	{
		this.loginForm.setEmail("");
		this.loginForm.setPassword("");
		this.registrationForm.setName("");
		this.registrationForm.setPassword("");
		this.registrationForm.setEmail("");
	}
}
